﻿// -----------------------------------------------------------------------
// <copyright file="ConfigFileAttribute.cs" company="">
// TODO: Update copyright text.
// </copyright>
// -----------------------------------------------------------------------

namespace NetFramework.Configuration
{
    using System;

    [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
    public class ConfigFileAttribute : Attribute
    {
        private string fileName;
        private string sectionName;
        private bool cacheable = true;

        // TODO:ADD CACHE PATTERN
        /// <summary>
        /// 用正在属性化的配置文件位置特性初始化 <see cref="ConfigFileAttribute"/> 类的新实例。
        /// </summary>
        /// <param name="fileName"></param>
        public ConfigFileAttribute(string fileName)
        {
            this.fileName = fileName;
        }

        /// <summary>
        /// 用正在属性化的配置文件位置特性初始化 <see cref="ConfigFileAttribute"/> 类的新实例。
        /// </summary>
        /// <param name="fileName"></param>
        public ConfigFileAttribute(string fileName, bool cacheable)
        {
            this.fileName = fileName;
            this.cacheable = cacheable;
        }

        /// <summary>
        /// 用正在属性化的配置文件位置特性初始化 <see cref="ConfigFileAttribute"/> 类的新实例。
        /// </summary>
        /// <param name="fileName"></param>
        public ConfigFileAttribute(string fileName, string dotNetSectionName)
        {
            this.fileName = fileName;
            this.sectionName = dotNetSectionName;
        }

         /// <summary>
        /// 用正在属性化的配置文件位置特性初始化 <see cref="ConfigFileAttribute"/> 类的新实例。
        /// </summary>
        /// <param name="fileName"></param>
        public ConfigFileAttribute(string fileName, string dotNetSectionName, bool cacheable)
        {
            this.fileName = fileName;
            this.sectionName = dotNetSectionName;
            this.cacheable = cacheable;
        }

        /// <summary>
        /// 获取相对路径文件名。
        /// </summary>
        /// <value>相对路径文件名。</value>
        public string FileName
        {
            get { return fileName; }
            protected set { this.fileName = value; }
        }

        /// <summary>
        /// 获取 Dot net 配置文件 SectionName。
        /// </summary>
        /// <value>相对路径文件名。</value>
        public string SectionName
        {
            get { return sectionName; }
            protected set { this.sectionName = value; }
        }

        public bool Cacheable
        {
            get { return this.cacheable; }
            protected set { this.cacheable = value; }
        }
    }
}
